package com.blankland.dataanalysis.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.blankland.dataanalysis.domain.Menu;
import com.blankland.dataanalysis.domain.User;
import com.blankland.dataanalysis.domain.vo.RouterVo;
import com.blankland.dataanalysis.service.UserService;
import com.blankland.dataanalysis.mapper.UserMapper;
import com.blankland.dataanalysis.utls.MenuHelperUtils;
import com.blankland.dataanalysis.utls.RouterHelperUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @author 朱琨日
* @description 针对表【gama_user(用户表)】的数据库操作Service实现
* @createDate 2023-11-13 15:31:19
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
    implements UserService{



    @Autowired
    private UserMapper userMapper;

    /**
     * 根据username，获取用户基本信息+菜单权限+按钮权限
     * @param username
     * @return
     */
    @Override
    public Map<String, Object> getUserInfo(String username) {
        /** 1、设置返回对象map（需要存储用户的基本信息+菜单权限+按钮权限）*/
        HashMap<String, Object> map = new HashMap<>();


        /** 2、添加用户基本信息 */
        //2.1、根据username查询用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("username",username);
        User user = userMapper.selectOne(wrapper);
        //2.1、用户名
        map.put("name",user.getUsername());
        //2.2、用户头像
        map.put("avatar",user.getHeadUrl());


        /** 3、添加菜单数据 */
        //3.1、根据userid查询所有的菜单
        int id = Long.valueOf(user.getId()).intValue();
        List<Menu> menuList =  userMapper.getMenuListByUserId(id);
        //3.2、将菜单集合  转成  树形结构
        List<Menu> treeMenuList = MenuHelperUtils.buildTree(menuList);
        //3.3、将树形菜单结构  转成  路由结构
        List<RouterVo> routerVoList = RouterHelperUtils.buildRouters(treeMenuList);
        //3.4、将树形菜单结构对应的路由结构，添加到集合中
        map.put("routers",routerVoList);


        /** 4、添加按钮权限数据 */
        //4.1、创建返回菜单中type=2（按钮）的perms字段（权限）的集合
        ArrayList<String> buttonPermsList = new ArrayList<>();
        //4.2、使用第三步中，根据userId查询出来的菜单数据
        for (Menu menu : menuList) {
            //4.3、如果type = 2
            if (menu.getType() ==2 ){
                //4.4、添加到list集合中
                buttonPermsList.add(menu.getPerms());
            }
        }
        //4.5、添加到map中
        map.put("buttons",buttonPermsList);

        return map;
    }
}





